home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 041-050 / amok45 / crypto / coder.mod < prev    next >
Text File  |  1993-11-04  |  3KB  |  122 lines

  1. (*-----------------------------------------------------------------------------
  2.  
  3.   :Program.     Coder
  4.   :Author       Klemens Meyer
  5.   :Address.     Sievershauser Str 3 3154 Edemissen/Oelerse
  6.   :Copyright.   Public Domain
  7.   :Language.    MODULA 2
  8.   :Translator.  M2Amiga V3.2d A+L
  9.   :History.     V 1.0 [Meyer] 19.06.89
  10.   :Contents.    Das Programm codiert eine beliebige Datei mit einem
  11.   :Contents.    beliebig langen Schlüssel.
  12.   :Usage.       Im CLI: Coder <FILE> <CODE>
  13.  
  14. -----------------------------------------------------------------------------*)
  15.  
  16. MODULE Coder;
  17.  
  18. FROM SYSTEM IMPORT
  19.   CAST;
  20.  
  21. FROM Arts IMPORT
  22.   TermProcedure,Terminate;
  23.  
  24. FROM Arguments IMPORT
  25.   NumArgs,GetArg;
  26.  
  27. FROM FileSystem IMPORT
  28.   File,Response,
  29.   Lookup,Close,ReadChar,WriteChar;
  30.  
  31. FROM InOut IMPORT
  32.   Write,WriteString,WriteLn;
  33.  
  34. FROM Str IMPORT
  35.   Concat,Length;
  36.  
  37.  
  38.  
  39.  
  40. TYPE Byte       = [0..7];
  41.      ByteSet    = SET OF Byte;
  42.      String     = ARRAY [0..80] OF CHAR;
  43.  
  44.  
  45. VAR  txt,cde    : File;
  46.      len        : INTEGER;
  47.      file,code  : String;
  48.  
  49.  
  50.  
  51.  
  52.  
  53. PROCEDURE XOr (x,y : CHAR) : CHAR;
  54. (* :Input.      zwei ASCII-Characters
  55.    :Result.     ASCII-Character
  56.    :Semantic.   Verknüpft die Chars bitweise Exklusiv-Oder *)
  57. BEGIN
  58.   RETURN CAST(CHAR,CAST(ByteSet,x)/CAST(ByteSet,y));
  59. END XOr;
  60.  
  61.  
  62. PROCEDURE CloseAll;
  63. (* :Semantic.   Abschlußprozedur. Schließt Ein- und Ausgabefile. *)
  64. BEGIN
  65.   Close (txt);
  66.   Close (cde);
  67. END CloseAll;
  68.  
  69.  
  70.  
  71. PROCEDURE Kodiere (VAR code : ARRAY OF CHAR);
  72. (* :Input.      Schlüssel
  73.    :Semantic.   kodiert Das File nach dem übergebenen Schlüssel.
  74.    :Semantic.   Dabei wird das gelesene Zeichen aus der Datei mit einem
  75.    :Semantic.   Zeichen des Schlüssels XOr - Verknüpft, und in die Ausgabe-
  76.    :Semantic.   datei geschrieben. Dann wird das nächste Zeichen aus der Datei
  77.    :Semantic.   gelesen und mit dem nächsten Zeichen des Schlüssels verknüpft.
  78.    :Semantic.   Wurde das letzte Zeichen des Schlüssels benutzt fährt die Pro-
  79.    :Semantic.   zedur mit dem ersten Zeichen fort. *)
  80. VAR c   : CHAR;
  81.     i,l : INTEGER;
  82. BEGIN
  83.   l:=Length (code);i:=l;
  84.   LOOP
  85.     INC(i);IF i>=l THEN i:=0 END;
  86.     ReadChar (txt,c);
  87.     IF txt.eof THEN EXIT END;
  88.     c:=XOr(c,code[i]);
  89.     WriteChar(cde,c);
  90.   END; (* LOOP *)
  91. END Kodiere;
  92.  
  93.  
  94.  
  95.  
  96. BEGIN (* MAIN *)
  97.   IF NumArgs()#2 THEN
  98.     WriteString ("Usage: Coder <FILE> <CODE>");WriteLn;
  99.     Terminate(0);
  100.   END; (* IF *)
  101.   TermProcedure (CloseAll);
  102.   GetArg(1,file,len);
  103.   Lookup (txt,file,8196,FALSE);
  104.   WriteString ("Lesefile: ");WriteString(file);
  105.   IF txt.res#done THEN
  106.     WriteString (" konnte nicht geöffnet werden!");WriteLn;
  107.     Terminate(0);
  108.   END; (* IF *)
  109.   WriteLn;
  110.   Concat (file,".cd");
  111.   Lookup (cde,file,8196,TRUE);
  112.   WriteString ("Schreibfile: ");WriteString (file);
  113.   IF cde.res#done THEN
  114.     WriteString (" konnte nicht geöffnet werden!");WriteLn;
  115.     Terminate(0);
  116.   END; (* IF *)
  117.   WriteLn;
  118.   GetArg(2,code,len);
  119.   Kodiere (code);
  120.   WriteString ("Kodierung beendet.");WriteLn;
  121. END Coder.
  122.